package cn.tedu.search.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Data
@Accessors(chain = true)  //  支持链式set赋值
@AllArgsConstructor       //  生成包含全部属性作为参数的构造方法
@NoArgsConstructor        //  生成没有任何参数的构造方法

// @Document是SpringDataElasticsearch框架标记一个对应ES中索引的实体类注解
// indexName指定ES中索引的名称,运行时,如果索引不存在,SpringData会自动创建这个索引
@Document(indexName = "items")
public class Item implements Serializable {

    // SpringData通过@Id标记当前实体类主键
    @Id
    private Long id;

    // @Field表示对应ES中的一个字段
    @Field(type = FieldType.Text,
            analyzer = "ik_max_word",
            searchAnalyzer = "ik_max_word")
    private String title;

    // FieldType.Keyword是不需要分词的字符串
    @Field(type = FieldType.Keyword)
    private String category;

    @Field(type = FieldType.Keyword)
    private String brand;

    @Field(type = FieldType.Double)
    private Double price;

    // imgPath是图片路径的属性,不会称为搜索条件,所以这个字段不需要创建索引
    // index = false设置当前字段不创建索引,节省一定空间
    // 但是当前imgPath字段值还是保存到ES中的
    @Field(type = FieldType.Keyword,index = false)
    private String imgPath;

    // images/2023/03/27/213acd-1253214-xxxxxxxx.jpg


}









